import java.util.*;

/**
 * @Author 孤风雪影
 * @Email gitee.com/efairy520
 * @Date 2024/4/15 0:51
 * @Version 1.0
 */
public class leecode_49 {
    /*
     * 49. 字母异位词分组
     * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
     * 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
     *
     * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
     * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
     */
    public static void main(String[] args) {
        String[] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        List<List<String>> result = groupAnagrams(strs);
        System.out.println("result = " + result);
    }

    public static List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < strs.length; i++) {
            char[]chars = strs[i].toCharArray();
            Arrays.sort(chars);//关键代码
            String temp = new String(chars);
            if (map.containsKey(temp)) {
                map.get(temp).add(i);
            } else {
                List<Integer> list = new ArrayList<>();
                list.add(i);
                map.put(temp, list);
            }
        }

        List<List<String>> result = new ArrayList<>();
        for (String key : map.keySet()) {
            ArrayList<String> sameStrs = new ArrayList<>();
            for (Integer i :  map.get(key)) {
                sameStrs.add(strs[i]);
            }
            result.add(sameStrs);
        }

        return result;
    }
}
